A wonderful string is a string where at most one letter appears an odd number of times.
- For example,
"ccjjc"
and"abab"
are wonderful, but"ab"
is not.
Given a string word
that consists of the first ten lowercase English letters ('a'
through 'j'
), return the number of wonderful non-empty substrings in word
. If the same substring appears multiple times inword
, then count each occurrence separately.
A substring is a contiguous sequence of characters in a string.
Input: word = "aba" Output: 4 Explanation: The four wonderful substrings are underlined below: - "aba" -> "a" - "aba" -> "b" - "aba" -> "a" - "aba" -> "aba"
Input: word = "aabb" Output: 9 Explanation: The nine wonderful substrings are underlined below: - "aabb" -> "a" - "aabb" -> "aa" - "aabb" -> "aab" - "aabb" -> "aabb" - "aabb" -> "a" - "aabb" -> "abb" - "aabb" -> "b" - "aabb" -> "bb" - "aabb" -> "b"
Input: word = "he" Output: 2 Explanation: The two wonderful substrings are underlined below: - "he" -> "h" - "he" -> "e"
1 <= word.length <= 105
word
consists of lowercase English letters from'a'
to'j'
.
implSolution{pubfnwonderful_substrings(word:String) -> i64{let word = word.as_bytes();letmut count = [0;1024];letmut mask = 0;letmut ret = 0; count[0] = 1;for i in0..word.len(){ mask ^= 1 << (word[i] - b'a');for j in0..10{ ret += count[mask ^ (1 << j)];} ret += count[mask]; count[mask] += 1;} ret }}